﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Conexion;
using System.Data.SqlClient;
using AccesoDatos.Objetos;

namespace AccesoDatos.Manejador
{
    public class Manejador_Calcula_Fecha
    {
        ClsConexion conexion = new ClsConexion();
        objDiasInhabiles obj = new objDiasInhabiles();
        //Segun la fecha del dia calcula la proxima quincena
        public DateTime calculaquincena()
        {

            DateTime fechaHoy = DateTime.Today;
            DateTime fechaTemp;
            DateTime fechaQuin = new DateTime();
            int mes, year, day, diasMes;
            string diaSemana;

            mes = fechaHoy.Month;
            year = fechaHoy.Year;
            day = fechaHoy.Day;

            if (day <= 15) diasMes = 15;
            else diasMes = DateTime.DaysInMonth(year, mes);

            fechaTemp = new DateTime(year, mes, diasMes);
            diaSemana = fechaTemp.ToString("dddd");

            switch (diaSemana)
            {
                case "sábado":
                    fechaTemp = fechaTemp.AddDays(-1);
                    break;
                case "domingo":
                    fechaTemp = fechaTemp.AddDays(-2);
                    break;
            }
            fechaQuin = fechaTemp;

            return fechaQuin;
        }
        /*Calcula la antigÜedad en dias del empleado*/
        public int calculaAntiguedad_Dias(DateTime fecha_inicio, DateTime fecha_fin)
        {
            TimeSpan diferencia = new TimeSpan();
            int dias;
            diferencia = fecha_fin.Subtract(fecha_inicio);
            dias = diferencia.Days;
            return dias;
        }
        /*Obtiene los años*/
        public int calculaAntiguedad_Year(DateTime fecha_inicio, DateTime fecha_fin)
        {
            int dias, year;
            dias = calculaAntiguedad_Dias(fecha_inicio, fecha_fin);
            year = dias / 365;
            return year;
        }
        /*Obtiene los dias sobrantes despues del año de vacaciones */
        public int calculaDiasVacaciones(DateTime fecha_inicio, DateTime fecha_fin)
        {
            TimeSpan diferencia = new TimeSpan();
            int year;
            int dia, mes;
            int dias;
            dia = fecha_inicio.Day;
            mes = fecha_inicio.Month;
            year = fecha_fin.Year;
            DateTime fecha_inicio1 = new DateTime(year, mes, dia);
            diferencia = fecha_fin.Subtract(fecha_inicio1);
            dias = diferencia.Days;
            
            return dias;
        }
        //Obtiene la fecha final que es (año[xxxx], mes[12], dia[31])
        public DateTime CalculaFechaAguinaldo(DateTime fecha_fin) {

            int year;
            year = fecha_fin.Year - 1;
            DateTime fecha_fin1 = new DateTime(year, 12, 31);

            return fecha_fin1;
        
        }
        /*Obtiene el numero de dias que se le tienen que pagar es para calcular si renuncia antes de la quincena*/
        public int calculaDiasPendientes(DateTime fecha_fin)
        {
            int dia, dias;

            dia = fecha_fin.Day;
            if (dia <= 15) dias = dia;
            else dias = dia - 15;

            return dias;
        }

        public objDiasInhabiles ConsultaNumeroDI(DateTime fecha_inicio, DateTime fecha_fin)
        {
            try
            {
                List<ClsParametros> lista = new List<ClsParametros>();
                lista.Add(new ClsParametros("@fecha_inicio", fecha_inicio.ToShortDateString()));
                lista.Add(new ClsParametros("@fecha_fin", fecha_fin.ToShortDateString()));
                DataTable datos = conexion.Datatable_standart("sp_RH_Vacaciones_Consulta_Fechas_Inhabiles", lista);
                DataRow[] array = new DataRow[datos.Rows.Count];
                datos.Rows.CopyTo(array, 0);
                object[] Info = datos.Rows[0].ItemArray;
                obj.Dias_Inhabiles = int.Parse(Info[0].ToString().Trim());
                return obj;
            }
            catch { return null; }
        }
    }
}
